package com.lianda.mutiple.pattern.future;

import java.util.concurrent.TimeUnit;

public class FutureTest {
    public static void main(String[] args) {
//        //无返回值
//        FutureService<Void, Void> service = FutureService.newService();
//        //提交任务
//        Future<?> future = service.submit(() ->{
//            try {
//                TimeUnit.SECONDS.sleep(10);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//            System.out.println("I am finish done.");
//        });
//
//        try {
//            future.get();
//        } catch (Exception e){
//            e.printStackTrace();
//        }


//        //有返回值
//        FutureService<String, Integer> service2 = FutureService.newService();
//        Future<Integer> future2 = service2.submit(input -> {
//            try {
//                TimeUnit.SECONDS.sleep(10);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//
//            return input.length();
//        }, "Hello");
//
//        try {
//            System.out.println(future2.get());
//        } catch (Exception e){
//            e.printStackTrace();
//        }

        //回调
        FutureService<String, Integer> service3 = FutureService.newService();
        service3.submit(input -> {
            try {
                TimeUnit.SECONDS.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            return input.length();

        }, "Hello", System.out::println);
    }
}
